Clustered storage systems have “nodes” that operate on shared storage volumes (a.k.a. logical volumes) configured from storage devices, such as hard disk drives and solid-state drives, to store and manage data. In some persistent reservation implementations, one storage controller of a node has exclusive access to a particular set of storage devices in a logical volume and is able to issue input/output (I/O) requests to them. Another storage controller (e.g., a second storage controller in a second node) may be able to “see” those storage devices but not be able to issue I/O requests to them. Any I/O requests the second storage controller receives for those storage devices are processed through I/O shipping. That is, the I/O request is sent by the receiving storage controller to the storage controller that has exclusive access to those storage devices. In failover implementations, the storage controllers are redundant in case one storage controller fails such that I/O processing can continue on the redundant storage controller. In whatever form, I/O shipping is generally performed. I/O shipping is a computationally intensive process of receiving an I/O with one storage controller and transferring it to another storage controller while managing the acknowledgements and overhead with the originally receiving storage controller.